package com.cd.university.service;

import com.cd.university.common.RestResult;
import com.cd.university.controller.form.*;
import com.cd.university.db.pojo.User;
import com.cd.university.vo.UserVo;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * @author 陈栋
 * @create 2021/9/5 20:34
 */
public interface UserService {

    /**
     * 通过用户的信息搜索用户
     * @param info 用户信息
     * @return 用户实例
     */
    public User searchUserByUserInfo(String info);

    /**
     * 注册一个用户
     * @param form 用户的form
     */
    public RestResult registerUser(UserRegisterForm form);

    /**
     * 查询所有的用户
     * @return 用户的Vo集合
     */
    public List<UserVo> searchAllUser();

    /**
     * 修改用户的角色
     * @param userId 用户id
     * @param roleId 角色id
     * @return 修改的行数
     */
    public int updateUserRole(Integer userId, Integer roleId);

    /**
     * 删除用户
     * @param userId 把用户的状态设置为0
     * @return 删除影响的行数
     */
    public int deleteUserByUserId(Integer userId);

    /**
     * 修改用户信息、密码
     * @param form 用户信息
     * @return 修改影响的行数
     */
    public int updateUserInfo(UserForm form);

    /**
     * 上传用户头像
     * @param image 用户头像文件
     * @return 统一响应格式
     */
    public RestResult updateUserImage(MultipartFile image);

    /**
     * 通过用户的编号查询用户
     * @param userNumber 用户编号
     * @return 统一响应格式
     */
    public RestResult searchUserByUserNumber(String userNumber);

    /**
     * 获得用户的头像，把头像图片放在响应中
     * @param response 响应
     * @param request 请求
     * @param userId 用户id
     * @return 统一响应格式
     */
    public RestResult getUserImage(HttpServletResponse response, HttpServletRequest request, Integer userId);

    /**
     * 修改用户的基本数据
     * @param form 用户的基本信息
     * @return 统一响应格式
     */
    public RestResult updateBasicInfo(UserBasicInfoForm form);

    /**
     * 更新密码
     * @param form 用户新密码，原始密码，用户id
     * @return 统一响应格式
     */
    public RestResult updatePwd(UserPasswordForm form);

    /**
     * 用户通过电话验证码修改密码
     * @param form 包含了用户的电话，新密码，以及短信验证码
     * @return 统一响应格式
     */
    public RestResult userRetrievePassword(UserRetrievePwdBySmsForm form);

    /**
     * 确认用户已经查看了新手引导视频
     * @param userId 用户id
     * @return 统一响应格式
     */
    public RestResult confirmNewUser(Integer userId);

    /**
     * 生成超级管理的邀请码
     * @param userId 用户id
     * @return 统一响应格式
     */
    public RestResult GenerateSuperInvitationCode(Integer userId);

    /**
     * 验证注册成为管理员的邀请码，正确的邀请码可以使用户成为Admin
     * @param userId 用户id
     * @param invitationCode 超级管理员邀请码
     * @return 统一响应格式
     */
    public RestResult VerifyInvitationCodeAndChangeRole(Integer userId, String invitationCode);
}
